package com.haidechizi.i18n.spring.boot.autoconfigure;


import com.haidechizi.i18n.common.execute.strategy.FlareOutTranslateExecute;
import com.haidechizi.i18n.common.execute.strategy.SimpleTranslateExecute;
import com.haidechizi.i18n.common.execute.wapper.TranslateExecuteProxy;
import com.haidechizi.i18n.common.executor.SimpleExecutor;
import com.haidechizi.i18n.common.support.MappingBindingInitializing;
import com.haidechizi.i18n.common.utils.I18nInfoUtils;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class I18nServiceAutoConfiguration {

    /**
     * 获取自定义的国际化类，以及对查询国际化的类增加包装（缓存）
     *
     * @return
     */
    @Bean
    public I18nInfoUtils i18nInfoUtils() {
        return new I18nInfoUtils();
    }

    /**
     * 国际化的核心策略，可以将层级结构的类变成扁平的结构
     *
     * @return
     */
    @Bean
    public FlareOutTranslateExecute flareOutTranslateExecute() {
        return new FlareOutTranslateExecute();
    }

    /**
     * 国际化的核心策略，递归对返回结果进行翻译
     *
     * @return
     */
    @Bean
    public SimpleTranslateExecute simpleTranslateExecute() {
        return new SimpleTranslateExecute();
    }

    /**
     * 国际化的核心策略代理类，自动选择国际化策略，支持动态变更核心策略
     *
     * @return
     */
    @Bean
    public TranslateExecuteProxy translateExecuteProxy() {
        return new TranslateExecuteProxy();
    }

    /**
     * 查询国际化平台多语言的简单策略
     *
     * @return
     */
    @Bean
    public SimpleExecutor simpleExecutor() {
        return new SimpleExecutor();
    }


    /**
     * 初始化自定义注解绑定关系
     *
     * @return
     */
    @Bean
    public MappingBindingInitializing mappingBindingInitializing() {
        return new MappingBindingInitializing();
    }

}
